package gui;

import static org.junit.Assert.*;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.TreeMap;
import java.util.TreeSet;

import org.junit.Test;

public class TesteChecaTipoDeClasse {

	@Test
	public void testStringEhTipoPrimitivo() 
	{
		String string = "";
		Class classeDaString = string.getClass();
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(classeDaString);
		assertEquals(classeEhTipoPrimitivo, true);
	}
	@Test
	public void testIntEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Integer.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testboolEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Boolean.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testLongEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Long.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testShortEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Short.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testByteEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Byte.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testFloatEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Float.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	
	@Test
	public void testDoubleEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Double.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	@Test
	public void testCharEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Character.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	
	@Test
	public void testEhTipoPrimitivo() 
	{
		
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(Short.TYPE);
		assertEquals(true, classeEhTipoPrimitivo);
	}
	
	@Test
	public void TestIntegerEhTipoPrimitivo()
	{
		Integer inteiro = new Integer(10);
		Class classeDoInteiro = inteiro.getClass();
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(classeDoInteiro);
		assertEquals(true, classeEhTipoPrimitivo); 
	}
	
	@Test
	public void TestBooleanEhTipoPrimitivo()
	{
		Boolean booleano = new Boolean(false);
		Class classeDoBooleano = booleano.getClass();
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(classeDoBooleano);
		assertEquals(true, classeEhTipoPrimitivo); 
	}
	
	@Test
	public void TestLinkedListEhTipoPrimitivo()
	{
		LinkedList<String> lista = new LinkedList<String>();
		Class classeDaLista = lista.getClass();
		boolean classeEhTipoPrimitivo = ChecaTipoDeClasse.classeEhTipoPrimitivo(classeDaLista);
		assertEquals(false, classeEhTipoPrimitivo); 
	}
	
	@Test
	public void classeArrayEhArrayOuSimilares()
	{
		Integer [] arranjo = new Integer[9];
		Class classeArranjo = arranjo.getClass();
		boolean arranjoEhArranjo = ChecaTipoDeClasse.classeEhArrayOuSimilares(classeArranjo);
		
		assertEquals(true, arranjoEhArranjo); 
	}
	
	@Test
	public void classeLinkedListEhArrayOuSimilares()
	{
		LinkedList<Integer> lista = new LinkedList<Integer>();
		Class classeLista = lista.getClass();
		
		boolean linkedListEhArranjo = ChecaTipoDeClasse.classeEhArrayOuSimilares(classeLista);
		
		assertEquals(true, linkedListEhArranjo); 
	}
	
	@Test
	public void TestClassePrimitivaEhArrayOuSimilares()
	{
		
		boolean inteiroEhArranjo = ChecaTipoDeClasse.classeEhArrayOuSimilares(Integer.TYPE);
		
		assertEquals(false, inteiroEhArranjo); 
	}
	
	@Test
	public void TestStringEhArrayOuSimilares()
	{
		String string = "";
		Class classeString = string.getClass();
		boolean stringEhArranjo = ChecaTipoDeClasse.classeEhArrayOuSimilares(classeString);
		
		assertEquals(false, stringEhArranjo); 
	}
	
	@Test
	public void TestArrayInteirosEhArrayQueGuardaTiposPrimitivos()
	{
		int [] array = new int [8];
		Class classe = array.getClass();
		boolean objetoGuardaTiposPrimitivos = ChecaTipoDeClasse.classeEhArrayOuSimilaresQueGuardaTiposPrimitivos(classe);
		assertEquals(true, objetoGuardaTiposPrimitivos);	
	}
	
	@Test
	public void TestArrayStringEhArrayQueGuardaTiposPrimitivos()
	{
		String [] array = new String [8];
		Class classe = array.getClass();
		boolean objetoGuardaTiposPrimitivos = ChecaTipoDeClasse.classeEhArrayOuSimilaresQueGuardaTiposPrimitivos(classe);
		assertEquals(true, objetoGuardaTiposPrimitivos);
	}
	
	@Test
	public void TestArrayGuardaClasseInventadaEhArrayQueGuardaTiposPrimitivos()
	{
		TesteChecaTipoDeClasse [] array = new TesteChecaTipoDeClasse [8];
		Class classe = array.getClass();
		boolean objetoGuardaTiposPrimitivos = ChecaTipoDeClasse.classeEhArrayOuSimilaresQueGuardaTiposPrimitivos(classe);
		assertEquals(false, objetoGuardaTiposPrimitivos);
	}
	
	@Test
	public void TestPriorityQueueEhHashMap()
	{
		PriorityQueue<Integer> objetoChecarSeEhHashMap = new PriorityQueue<Integer>();
		Class classe = objetoChecarSeEhHashMap.getClass();
		boolean objetoEhHashMap = ChecaTipoDeClasse.classeEhHashMap(classe);
		assertEquals(false, objetoEhHashMap); 
	}
	
	@Test
	public void TestTipoPrimitivoEhHashMap()
	{
		boolean objetoEhHashMap = ChecaTipoDeClasse.classeEhHashMap(Integer.TYPE);
		assertEquals(false, objetoEhHashMap); 
	}
	
	//hashmaps n~ao funcionam em nosso projeto: nao tem como saber seus tipos primitivos.
	/*public void TestHashMapDeInteirosGuardaValoresPrimitivos()
	{
		HashMap<Integer, Integer> objetoParaSaberSeGuardaValoresPrimitivos = new HashMap<>();
		Class classeDoMap = objetoParaSaberSeGuardaValoresPrimitivos.getClass();
		boolean objetoGuardavaloresPrimitivos = ChecaTipoDeClasse.classeEhHashmapQueGuardaTiposPrimitivos(classeDoMap);
		assertEquals(true, objetoGuardavaloresPrimitivos);
	}*/
	
	
	
	

}
